# coding=utf-8

# 在Python中，定义一个函数要使用def语句，依次写出函数名、括号、括号中的参数和冒号:，然后，在缩进块中编写函数体，函数的返回值用return语句返回。
def hehe(s):
    if s > 1:
        return s
    else:
        return -s


print(hehe(-22))


# 如果想定义一个什么事也不做的空函数，可以用pass语句：
# pass语句什么都不做，那有什么用？实际上pass可以用来作为占位符，比如现在还没想好怎么写函数的代码，就可以先放一个pass，让代码能运行起来。
def nop():
    pass


print(nop())


def my_hehe(s):
    if not isinstance(s, (int, float)):
        raise TypeError('自定义异常提示')
    if s > 1:
        return s
    else:
        return -s


print(my_hehe(11.231))
# print my_hehe('aaa')

# 返回多个值
# import math语句表示导入math包，并允许后续代码引用math包里的sin、cos等函数。
import math


def move(x, y, step, angel=0):
    nx = x + step * math.cos(angel)
    ny = y - step * math.sin(angel)
    return nx, ny


# 但其实这只是一种假象，Python函数返回的仍然是单一值
# 原来返回值是一个tuple！但是，在语法上，返回一个tuple可以省略括号，而多个变量可以同时接收一个tuple，按位置赋给对应的值，
# 所以，Python的函数返回多值其实就是返回一个tuple，但写起来更方便。
print(move(100, 100, 60, math.pi / 6))

'''
小结
定义函数时，需要确定函数名和参数个数；

如果有必要，可以先对参数的数据类型做检查；

函数体内部可以用return随时返回函数结果；

函数执行完毕也没有return语句时，自动return None。

函数可以同时返回多个值，但其实就是一个tuple
'''
